#pragma once

#include <iostream>
#include <cstdlib>
#include <cassert>

// for use with player profiling
const int I_PLAYER_HUMAN 				= -1; // human player
const int I_PLAYER_COMPUTER_EASY 		=  2; // easy computer
const int I_PLAYER_COMPUTER_MED 		=  4; // medium computer
const int I_PLAYER_COMPUTER_HARD 		=  8; // hard computer

// struct for holding game values
typedef struct
{
	// array of piece values
	int PIECE_VALUE[12];

	// global search agent
	I_SEARCH_AGENT SEARCH_AGENT;

	// zobrist keys and locks
	ZOBRIST ZKEYS, ZLOCK;

	// position location information
	I_POSITION_BOARDS POS_BOARDS;

	// opening book data structure
	I_ARRAY<ZRANDOM> OPEN_BOOK;

	// weights for the static_eval function
	I_ARRAY<FLT_NUMBER> EVAL_VALUES;
	
	// player profiles (computer or human)
	int PLAYER_PROFILES[PLAYERS];
}
I_GAME;

// this I_GAME object drives the entire engine. it is a passive struct 
// defined in "i_game.const.h" with the search agent, zobrist keys, &c.
// most functions that need to directly pass the values inside should
// also have an I_GAME analogy
I_GAME GAME;
